home *** CD-ROM | disk | FTP | other *** search
/ Practical Algorithms for Image Analysis / Practical Algorithms for Image Analysis.iso / TARFILE.GZ / tarfile / ch_4.3 / xcc / test_xcc.c < prev    next >
C/C++ Source or Header  |  1999-09-11  |  2KB  |  102 lines

  1. /* 
  2.  * test_xcc.c
  3.  * 
  4.  * Practical Algorithms for Image Analysis
  5.  * 
  6.  * Copyright (c) 1997 1997, 1998, 1999 MLMSoftwareGroup, LLC
  7.  */
  8.  
  9. /*
  10.  * TEST_XCC.C
  11.  *
  12.  * routines to support test mode of xcc.c:
  13.  * the test mode dispenses with image I/O and relies on appropriate
  14.  * data representing sets of edge tuples, supplied in a data file, 
  15.  * test_xcc.tpl
  16.  *
  17.  */
  18.  
  19. #include "xcc.h"
  20.  
  21. /*
  22.  * io error handling
  23.  */
  24. int
  25. io_err (char *string, int retval)
  26. {
  27.   printf ("...%s:", string);
  28.   printf (" error reading file\n");
  29.  
  30.   return (retval);
  31. }
  32.  
  33. /*
  34.  * read first line in data file to determine size of record
  35.  */
  36. int
  37. fetch_test_parms (FILE * file, float *dsk_dia, int *del_ir, int *nch, int *ir_base)
  38. {
  39.   int retval;
  40.  
  41.  
  42.   if (((retval = fscanf (file, "%f", dsk_dia)) == 0) || (retval == EOF))
  43.     io_err ("FETCH_TEST_PARMS", 0);
  44.  
  45.   if (((retval = fscanf (file, "%d", del_ir)) == 0) || (retval == EOF))
  46.     io_err ("FETCH_TEST_PARMS", 0);
  47.  
  48.   if (((retval = fscanf (file, "%d", nch)) == 0) || (retval == EOF))
  49.     io_err ("FETCH_TEST_PARMS", 0);
  50.  
  51.   if (((retval = fscanf (file, "%d", ir_base)) == 0) || (retval == EOF))
  52.     io_err ("FETCH_TEST_PARMS", 0);
  53.  
  54.  
  55.   return (1);
  56. }
  57.  
  58.  
  59.  
  60. /*
  61.  * read test data in the form of edge tuples on a given row (scan line)
  62.  * edge tuple test data in the form {cl, cr} are contained in the data
  63.  * file (generally of type .tpl) for a set of consecutive scan lines, 
  64.  * (spaced at del_ir); 
  65.  * the edge tuples for each row are given in the form of a group of
  66.  * tuples {cl, cr} preceeded by the nof tuples in the group;
  67.  * the top of the file contains, in order: dsk_dia (type float);
  68.  *                                      del_ir (type int);
  69.  *                                      ir_base (type int);
  70.  */
  71. int
  72. fetch_test_row (FILE * file, struct linklist *etll)
  73. {
  74.   int ie, ne;
  75.   int row;
  76.   int retval;
  77.  
  78.   struct edge_tuple cur_etpl, *cetpl = &cur_etpl;
  79.  
  80.  
  81.   if (((retval = fscanf (file, "%d %d", &ne, &row)) == 0) || (retval == EOF))
  82.     io_err ("FETCH_TEST_ROW", 0);
  83.  
  84.   printf ("\n...fetch %d edge tuples for row %d\n", ne, row);
  85.   llhead (etll);
  86.   cetpl->cl = cetpl->cr = -1;
  87.   cetpl->status = UnMatched;
  88.  
  89.   for (ie = 0; ie < ne; ie++) {
  90.  
  91.     retval = fscanf (file, "%d %d", &(cetpl->cl), &(cetpl->cr));
  92.     if ((retval == 0) || (retval == EOF))
  93.       io_err ("FETCH_TEST_ROW", 0);
  94.  
  95.     cetpl->status = Matched;
  96.  
  97.     /* enter new ON-segm into edge_tuple_list */
  98.     lladd ((char *) cetpl, etll);
  99.   }
  100.   return (ne);
  101. }
  102.